package commons.ui.widget;

import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.widgets.Text;

import commons.utils.StringUtils;

/**
 * Custom text field for displaying formatted values. Beeps and ignores
 * characters that cause the content of the control to become unparsable.
 * 
 * @author Ihor Strutynskyj
 */
public class SimpleNumericalDecorator {
    Text _text;

    public SimpleNumericalDecorator(Text text) {
	_text = text;
	_init();
    }

    protected void _init() {
	_text.addVerifyListener(new VerifyListener() {
	    public void verifyText(VerifyEvent e) {
		String eText = e.text;
		if (StringUtils.isBlank(eText)) {
		    return;
		}
		if (!eText.matches("\\d+")) {
		    e.display.beep();
		    e.doit = false;
		    return;
		}
		String newText = _text.getText();
		newText = newText.substring(0, e.start) + eText + newText.substring(e.end);
		if (!newText.matches("\\d+")) {
		    e.display.beep();
		    e.doit = false;
		    return;
		}
	    }
	});
    }
}
